Utilisation de MC_DigitalCamSwitch_HighPrecision
L'exemple BasicMotion_DigitalCamSwitch_HighPrecision.project se trouve dans le répertoire d'installation CODESYS sous ..\CODESYS SoftMotion\Examples.
Cet exemple montre comment utiliser les sorties de SMC_DigitalCamSwitch_HighPrecision pour contrôler les sorties numériques avec une résolution temporelle élevée. Les terminaux EL2258 et EL2252 de Beckhoff sont utilisés à titre d'
Avis
Les descriptions des appareils fournies par Beckhoff ne sont pas incluses dans l'exemple. Vous pouvez les télécharger directement auprès du fournisseur et les installer dans le référentiel des appareils. Pour exécuter cet exemple, vous avez besoin d'un coupleur de bus EK1100, d'une borne EL2258 et d'une borne EL2252
Important
Cet exemple a été développé et testé conformément à la révision 0017 de l'EL2258 et à la révision 0020 de l'EL2252. Cela ne sert qu'à titre d'exemple. Nous n'en garantissons pas l'exactitude. Le code source doit être testé avant utilisation. Si nécessaire, il doit être modifié pour d'autres révisions des terminaux.
Structure de la demande
L'application se compose d'un Main programme, le DigitalCamSwitch_EL2258 et DigitalCamSwitch_EL2252 des blocs fonctionnels et un coupleur de bus EK1100 avec les bornes de sortie EL2258 et EL2252.
Le DigitalCamSwitch_EL2258 et DigitalCamSwitch_EL2252 les blocs fonctionnels sont les éléments essentiels de l'exemple. Ils montrent comment utiliser Events sortie de SMC_DigitalCamSwitch_HighPrecision pour programmer des sorties numériques. Les blocs fonctionnels doivent être compris comme des exemples qui peuvent être adaptés à d'autres matériels.
DigitalCamSwitch_EL2258
Le bloc de fonction est initialisé sur un front montant au
Enableentrée. Dans leSTATE_INIT_0etSTATE_INIT_1états, lesOutputBufferResetles signaux du terminal EL2258 sont écrits etaLastEventIdstableau est initialisé. L'ID du dernier événement traité pour chaque piste est enregistré dans ce tableau. Cela permet d'éviter qu'un événement soit transféré plusieurs fois au terminal.Une fois initialisé (
STATE_ACTIVE), toutes les pistes sont traitées à tour de rôle et la logique suivante est exécutée pour chaque piste :Vérifiez si le terminal EL2258 a déjà accepté les derniers événements commandés (
ChannelsIn[channel].OutputOrderFeedback = ChannelsOut[channel].OutputOrderCounter).Parcourez tous les événements de la piste. Seuls les événements dont
ToggleEventIdest supérieur au dernier identifiant traité sont pris en compte ultérieurement. (RequêteEventId_GreaterThan(event^.ToggleEventId, aLastEventIds[channel]))Voir la section : « Remarque sur l'ordre des événements ».
Convertissez le
Durationde l'événement dans un horodatage EtherCAT et écriture correspondante duChannelsOut[channel].OutputEventStateetChannelsOut[channel].OutputEventTimesorties.Interrompez le traitement après un maximum de 5 événements.
Avertissez le terminal de l'existence de nouveaux événements si au moins un événement a été détecté (
ChannelsOut[channel].OutputOrderCounter := ChannelsOut[channel].OutputOrderCounter + 1).
Remarque sur l'ordre des événements
Les événements sont renvoyés par SMC_DigitalCamSwitch_HighPrecision bloc fonctionnel pour chaque piste d'un tableau. SwitchNumber et un ToggleEventId sont remboursés pour chaque événement. ToggleEventId est unique et ascendante pour chaque piste.
Pour plus d'informations, voir : ÉVÉNEMENT SMC_CAMSWITCH_TOGGLE_EVENT.
Dans l'exemple, aLastEventIds[trackNo] le tableau stocke pour chaque piste qui ToggleEventId a été transféré pour la dernière fois au terminal lors d'un appel de bloc fonctionnel précédent. Parce que le ToggleEventIds sont classés par ordre croissant, le prochain appel saura exactement quels événements doivent encore être transférés.
Parce que l'on ne sait pas à quel moment
ToggleEventIdles événements commencent, unvalidle drapeau est enregistré dansEventIdtype de données en plus de l'ID. Pour leEventId_GreaterThancomparaison, cettevalidle drapeau est pris en compte en conséquence.Le
ToggleEventIdsavoir le type de données 32 bitsUDINTet peuvent donc, en principe, déborder avec une durée de fonctionnement respectivement longue ou une fréquence de commutation élevée. La valeur passe ensuite de 2^32-1 à 0. La fonction de comparaisonEventId_GreaterThanprend également en compte les dépassements de 32 bits.
Cartographie PDO EL2258
Le ChannelsOut et ChannelsIn sorties du DigitalCamSwitch_EL2258 les blocs fonctionnels sont connectés aux canaux d'E/S respectifs de la borne EL2258. L'image suivante montre les mappages pour le canal 1. Le canal 2 est similaire ; uniquement lors de l'accès ChannelsOut et ChannelsIn l'indice est 2 et non 1.

DigitalCamSwitch_EL2252
Le principe de base est identique à DigitalCamSwitch_EL2258. La différence réside dans la façon dont les signaux sont écrits, car le terminal EL2252 ne peut programmer qu'un seul événement actif
Tout d'abord, le bloc fonctionnel est initialisé dans
STATE_INIT.Puis
STATE_CHECK_FOR_EVENTvérifie si les événements provenant duSMC_DigitalCamSwitch_HighPrecisionle bloc de fonction est en attente.Si un événement est disponible, il doit être programmé en deux cycles :
Les sorties et l'horodatage EtherCAT sont écrits au cours du premier cycle.
Activatela sortie est réglée sur 0.Au cours du deuxième cycle,
Activatela sortie est réglée sur 3STATE_ACTIVATE_EVENT_IN_EL2252. Cela active l'événement dans le terminal.
Dans
STATE_WAIT_UNTIL_THE_INPUTS_MATCH_THE_OUTPUTS, le système attend ensuite que l'événement soit exécuté. Les signaux provenant duFeedbackles entrées du terminal sont utilisées pour cela.
Cartographie PDO EL2252

Main
Dans le programme principal, quatre commutateurs sont configurés (deux sur chaque piste). Les pistes ont également différentes compensations activées/désactivéesOnComp, OffComp) :

Le programme inclut les appels de blocs fonctionnels nécessaires pour activer une prévision pour l'axe et le déplacer constamment à 180°/s (*), ainsi que pour SMC_DigitalCamSwitch_HighPrecision, DigitalCamSwitch_EL2258, et DigitalCamSwitch_EL2252. Avant de démarrer le mouvement, le bus de terrain doit être complètement mis sous tension. Dans le cas contraire, les événements ne peuvent pas être transmis au terminal.
(*) Le mouvement constant a été choisi pour que l'exemple reste simple et clair. Cependant, le SMC_DigitalCamSwitch_HighPrecision bloc fonctionnel fonctionne avec tous les types de mouvements. Par exemple, il fournit également des horodatages exacts lors d'une phase d'accélération ou avec
Mise en service
Créez l'application et téléchargez-la sur une manette.
Démarrez l'application.